package oracle;

import java.sql.*;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;

import dados.*;

public class Selecionar {
	public static ArrayList<Consulta> selecionarConsulta(String chave) throws SQLException, ClassNotFoundException{
		Conexao.abrirConexao();
		ArrayList<Consulta> iterator = new ArrayList<Consulta>();   

		Statement stmt = Conexao.con.createStatement();
		ResultSet rs;

		if(chave == ""){
			rs = stmt.executeQuery("SELECT c.data_entrada, c.data_alta, c.previsao_alta, c.diagnostico, c.paciente.cpf, c.medico.crm, c.enfermaria.id_enfermaria FROM tb_consulta c");
		} else {
			rs = stmt.executeQuery("SELECT c.data_entrada, c.data_alta, c.previsao_alta, c.diagnostico, c.paciente.cpf, c.medico.crm, c.enfermaria.id_enfermaria FROM tb_consulta c WHERE data_entrada = '"+chave+"'");
		}

		while(rs.next()) {

			String data_entrada = rs.getString(1).substring(0, rs.getString(1).indexOf(" "));
			String data_alta = rs.getString(2);
			if(data_alta == null){
				data_alta = "";
			} else {
				data_alta = data_alta.substring(0, rs.getString(2).indexOf(" "));
			}
			String previsao_alta = rs.getString(3);
			if(previsao_alta == null){
				previsao_alta = "";
			} else {
				previsao_alta = previsao_alta.substring(0, rs.getString(3).indexOf(" "));;
			}
			String diagnostico = rs.getString(4);
			String paciente = rs.getString(5);
			String medico = rs.getString(6);
			String enfermaria = rs.getString(7);

			Consulta consulta = new Consulta(data_entrada, data_alta, previsao_alta, diagnostico, paciente, medico, enfermaria);
			iterator.add(consulta);
		}
		stmt.close();
		rs.close();
		Conexao.fecharConexao();
		return iterator;
	}

	public static ArrayList<Enfermaria> selecionarEnfermaria(String chave) throws SQLException, ClassNotFoundException{
		Conexao.abrirConexao();
		ArrayList<Enfermaria> iterator = new ArrayList<Enfermaria>();

		Statement stmt = Conexao.con.createStatement();
		ResultSet rs;
		if(chave == ""){
			rs = stmt.executeQuery("SELECT * FROM tb_enfermaria order by id_enfermaria");
		} else {
			rs = stmt.executeQuery("SELECT * FROM tb_enfermaria WHERE id_enfermaria = '"+chave+"' order by id_enfermaria");
		}

		while(rs.next()){

			String id = rs.getString("id_enfermaria");
			String qtd_leitos = rs.getString("qtd_leitos");
			String leitos_ocupados = rs.getString("leitos_ocupados");

			Enfermaria enfermaria = new Enfermaria(id, qtd_leitos, leitos_ocupados);

			iterator.add(enfermaria);
		}

		stmt.close();
		rs.close();
		Conexao.fecharConexao();
		return iterator;
	}

	public static ArrayList<FichaAtendimento> selecionarFichaAtendimento(String chave) throws SQLException, ClassNotFoundException{
		Conexao.abrirConexao();
		ArrayList<FichaAtendimento> iterator = new ArrayList<FichaAtendimento>();

		Statement stmt = Conexao.con.createStatement();
		ResultSet rs;
		if(chave == ""){
			rs = stmt.executeQuery("SELECT f.data_hora_entrada, f.servidor.matricula, f.paciente.cpf, f.id_ficha_clinica.id_ficha_clinica FROM tb_ficha_atendimento f order by f.id_ficha_clinica.id_ficha_clinica");
		} else {
			rs = stmt.executeQuery("SELECT f.data_hora_entrada, f.servidor.matricula, f.paciente.cpf, f.id_ficha_clinica.id_ficha_clinica FROM tb_ficha_atendimento f where f.data_hora_entrada = '"+chave+"' f.id_ficha_clinica.id_ficha_clinica");
		}

		while(rs.next()){
			String data_hora_entrada = rs.getString(1);
			String servidor = rs.getString(2);
			String paciente = rs.getString(3);
			String id_ficha_clinica = rs.getString(4);
			FichaAtendimento fichaAtendimento = new FichaAtendimento(data_hora_entrada, servidor, paciente, id_ficha_clinica); 
			iterator.add(fichaAtendimento);
		}

		stmt.close();
		rs.close();
		Conexao.fecharConexao();
		return iterator;
	}

	public static ArrayList<FichaClinica> selecionarFichaClinica(String chave) throws SQLException, ClassNotFoundException{
		Conexao.abrirConexao();
		ArrayList<FichaClinica> iterator = new ArrayList<FichaClinica>();

		Statement stmt = Conexao.con.createStatement();
		ResultSet rs = null;
		if(chave == ""){
			rs = stmt.executeQuery("select * from tb_ficha_clinica order by id_ficha_clinica");
		} else {
			rs = stmt.executeQuery("select * from tb_ficha_clinica where id_ficha_clinica = "+chave+" order by id_ficha_clinica");
		}

		while(rs.next()){

			String id = rs.getString("id_ficha_clinica");
			String grau = rs.getString("grau");
			String status = rs.getString("status");

			FichaClinica fichaClinica = new FichaClinica(id, grau, status);
			iterator.add(fichaClinica);
		}

		stmt.close();
		rs.close();
		Conexao.fecharConexao();
		return iterator;
	}

	public static ArrayList<Medico> selecionarMedico(String chave) throws SQLException, ClassNotFoundException{
		Conexao.abrirConexao();
		ArrayList<Medico> iterator = new ArrayList<Medico>();

		ImageIcon foto = null;
		Blob imagemArmazenada = null;

		Statement stmt = Conexao.con.createStatement();
		ResultSet rs;
		if(chave == ""){
			rs = stmt.executeQuery("SELECT * FROM tb_medico");
		} else {
			rs = stmt.executeQuery("SELECT * FROM tb_medico WHERE crm = '"+chave+"'");
		}

		while(rs.next()){
			String cpf, nome, data_nascimento, sexo; 

			cpf = rs.getString("cpf");
			nome = rs.getString("nome");
			data_nascimento = rs.getString("data_nascimento");
			if(data_nascimento == null){
				data_nascimento = "";
			} else {
				data_nascimento = data_nascimento.substring(0, rs.getString("data_nascimento").indexOf(" "));
			}
			sexo = rs.getString("sexo");
			Array z = rs.getArray("telefones");
			String[] tele = (String[])z.getArray();
			String telefones = "";
			for (int i = 0; i < tele.length; i++) {
				if(i+1 == tele.length){
					telefones += tele[i];
				} else{
					telefones += tele[i]+", ";
				}
			}

			String crmNovo, ativo, supervisor;
			crmNovo = rs.getString("crm");
			ativo = rs.getString("ativo");
			supervisor = rs.getString("supervisor");

			imagemArmazenada = rs.getBlob("foto");
			int tamanho = (int) imagemArmazenada.length();
			foto = new ImageIcon(imagemArmazenada.getBytes(1L, tamanho));

			Endereco endereco = null;
			Medico novo = new Medico(cpf, nome, data_nascimento, sexo, endereco, telefones, crmNovo, supervisor, ativo, foto);
			iterator.add(novo);

		}		
		stmt.close();
		rs.close();
		Conexao.fecharConexao();
		return iterator;
	}

	public static ArrayList<Paciente> selecionarPaciente(String chave) throws SQLException, ClassNotFoundException{
		Conexao.abrirConexao();
		ArrayList<Paciente> iterator = new ArrayList<Paciente>();

		Statement stmt = Conexao.con.createStatement();
		ResultSet rs;

		if(chave == ""){
			rs = stmt.executeQuery("SELECT * FROM tb_paciente");
		} else {
			rs = stmt.executeQuery("SELECT * FROM tb_paciente WHERE cpf = '"+chave+"'");
		}

		while(rs.next()){

			String nome = rs.getString("nome");
			String cpf = rs.getString("cpf");
			String data_nascimento = rs.getString("data_nascimento");
			if(data_nascimento == null){
				data_nascimento = "";
			} else {
				data_nascimento = data_nascimento.substring(0, rs.getString("data_nascimento").indexOf(" "));
			}
			String sexo = rs.getString("sexo");
			Array z = rs.getArray("telefones");
			String[] tele = (String[])z.getArray();
			String telefones = "";
			for (int i = 0; i < tele.length; i++) {
				if(i+1 == tele.length){
					telefones += tele[i];
				} else{
					telefones += tele[i]+", ";
				}
			}
			Endereco endereco = null;
			Paciente paciente = new Paciente(cpf, nome, data_nascimento, sexo, endereco, telefones);
			iterator.add(paciente);

		}
		stmt.close();
		rs.close();
		Conexao.fecharConexao();
		return iterator;
	}

	public static ArrayList<ServidorGeral> selecionarServidorGeral(String chave) throws SQLException, ClassNotFoundException{
		Conexao.abrirConexao();
		ArrayList<ServidorGeral> iterator = new ArrayList<ServidorGeral>();

		Statement stmt = Conexao.con.createStatement();
		ResultSet rs;

		if(chave == ""){
			rs = stmt.executeQuery("SELECT * FROM tb_servidor_geral");
		} else {
			rs = stmt.executeQuery("SELECT * FROM tb_servidor_geral WHERE matricula = '"+chave+"'");
		}

		while(rs.next()){
			String nome = rs.getString("nome");
			String cpf = rs.getString("cpf");
			String data_nascimento = rs.getString("data_nascimento");
			if(data_nascimento == null){
				data_nascimento = "";
			} else {
				data_nascimento = data_nascimento.substring(0, rs.getString("data_nascimento").indexOf(" "));
			}
			String sexo = rs.getString("sexo");
			String ativo = rs.getString("ativo");
			String matricula = rs.getString("matricula");
			Array z = rs.getArray("telefones");
			String[] tele = (String[])z.getArray();
			String telefones = "";
			for (int i = 0; i < tele.length; i++) {
				if(i+1 == tele.length){
					telefones += tele[i];
				} else{
					telefones += tele[i]+", ";
				}
			}
			Endereco endereco = null;
			ServidorGeral serv = new ServidorGeral(cpf, nome, data_nascimento, sexo, endereco, telefones, matricula, ativo);
			iterator.add(serv);
		}
		stmt.close();
		rs.close();
		Conexao.fecharConexao();
		return iterator;
	}

	public static ArrayList<Acompanhante> selecionarAcompanhante(String chave) throws ClassNotFoundException, SQLException {

		Conexao.abrirConexao();
		ArrayList<Acompanhante> iterator = new ArrayList<Acompanhante>();

		Statement stmt = Conexao.con.createStatement();
		ResultSet rs;

		if(chave == ""){
			rs = stmt.executeQuery("SELECT * FROM tb_acompanhante");
		} else {
			rs = stmt.executeQuery("SELECT * FROM tb_acompanhante WHERE nome = '"+chave+"'");
		}

		while(rs.next()){
			String cpf = rs.getString("cpf");
			String nome = rs.getString("nome");
			String data_nascimento = rs.getString("data_nascimento");
			if(data_nascimento == null){
				data_nascimento = "";
			} else {
				data_nascimento = data_nascimento.substring(0, rs.getString("data_nascimento").indexOf(" "));
			}
			String sexo = rs.getString("sexo");
			Array z = rs.getArray("telefones");
			String[] tele = (String[])z.getArray();
			String telefones = "";
			for (int i = 0; i < tele.length; i++) {
				if(i+1 == tele.length){
					telefones += tele[i];
				} else{
					telefones += tele[i]+", ";
				}
			}

			String vinculo_afetivo = rs.getString("vinculo_afetivo");
			String cpf_paciente = rs.getString("cpf_paciente");

			Endereco endereco = null;
			Acompanhante acompanhante = new Acompanhante(cpf, nome, data_nascimento, sexo, endereco, telefones, vinculo_afetivo, cpf_paciente);

			iterator.add(acompanhante);
		}

		stmt.close();
		rs.close();
		Conexao.fecharConexao();
		return iterator;
	}
}
